;;; emp.el --- AUCTeX support for emp.sty  -*- lexical-binding: t; -*-

;; Copyright (C) 2004--2024 Free Software Foundation, Inc.

;; Author: Yvon Henel aka TeXnicien de surface <Yvon.Henel@wanadoo.fr>
;; Maintainer: auctex-devel@gnu.org
;; Keywords: tex

;; This file is part of AUCTeX.

;; AUCTeX is free software; you can redistribute it and/or modify it
;; under the terms of the GNU General Public License as published by the
;; Free Software Foundation; either version 3, or (at your option) any
;; later version.

;; AUCTeX is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
;; FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
;; for more details.

;; You should have received a copy of the GNU General Public License
;; along with this program.  If not, see <https://www.gnu.org/licenses/>.

;; version 1.0 2004-03-04

;;; Code:

(require 'tex)
(require 'latex)

(TeX-add-style-hook
 "emp"
 (lambda ()
   (TeX-add-symbols "empuse" "empTeX"  "empaddtoTeX"
                    "emprelude" "empaddtoprelude" "unitlength")
   (LaTeX-add-environments
    '("empfile" LaTeX-env-empfile)
    '("emp" LaTeX-env-emp-gen)
    '("empdef" LaTeX-env-emp-gen)
    '("empgraph" LaTeX-env-emp-gen)
    '("empcmds")))
 TeX-dialect)

(defun LaTeX-env-emp-gen (environment-name)
   "Ask for file, width and length. Insert environment-name environment
Used for emp, empdef, and empgraph environments."
   (let ((emp-fig-name (TeX-read-string "figure name: " ""))
         (emp-fig-width (TeX-read-string "figure width: " "1" ))
         (emp-fig-height (TeX-read-string "figure height: " "1" ))
         ;;; emp.sty demands a width and a height for each of the
         ;;; emp, empdef, and empgraph environments
         ;;; we give them 1 by default
         ;;; not necessarily the best thing to do?
         LaTeX-emp-fig-name)
     (if (not (zerop (length emp-fig-name)))
         (progn
           (setq LaTeX-emp-fig-name (concat LaTeX-optop emp-fig-name LaTeX-optcl))
           (LaTeX-insert-environment environment-name LaTeX-emp-fig-name))
         (LaTeX-insert-environment environment-name))
     (forward-line -1)
     (end-of-line)
     (insert "(" emp-fig-width "," emp-fig-height ")")
     (forward-line 1)
     (indent-according-to-mode)))

(defun LaTeX-env-empfile (_optional)
  "Ask for file. Insert empfile environment."
  (let ((empfile (TeX-read-string "empfile: " ""))
        LaTeX-emp-file-name mpost-emp-file-name)
    (if (not (zerop (length empfile)))
        (progn
          (setq LaTeX-emp-file-name (concat LaTeX-optop empfile LaTeX-optcl))
          (setq mpost-emp-file-name (concat empfile ".mp"))
          (LaTeX-insert-environment "empfile" LaTeX-emp-file-name))
      (setq mpost-emp-file-name "\\jobname")
      (LaTeX-insert-environment "empfile"))
    (if LaTeX-write18-enabled-p
        (progn
          (forward-line 1)
          (end-of-line)
          (newline-and-indent)
          (insert "\\immediate\\write18{mpost -tex=latex " mpost-emp-file-name TeX-grcl)
          (forward-line -2)))))

;;; emp.el ends here
